package com.uncp.comisiondeadmision.evaluacion.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.uncp.comisiondeadmision.evaluacion.beans.DetalleSolicitudBean;
import com.uncp.comisiondeadmision.evaluacion.beans.DetalleSolicitudBeanMixto;
import com.uncp.comisiondeadmision.evaluacion.beans.EvaluarBean;
import com.uncp.comisiondeadmision.util.MySqlDBConn;

public class MySqlDetalleSolicitudDAO implements DetalleSolicitudDAO {

	
	@Override
	public ArrayList<DetalleSolicitudBeanMixto> traeDetallePendiente(
			Integer cod_postu) throws SQLException {
		Connection con = null;
		PreparedStatement ps = null;
		ArrayList<DetalleSolicitudBeanMixto> lista;
		ResultSet rs = null;
		try {
			lista = new ArrayList<DetalleSolicitudBeanMixto>();
			con = new MySqlDBConn().getConnection();
			String sql = "select d.item,r.nombre,s.nrosolicitud from  detallesolicitud d  inner join requisito r "
					+ "on r.codrequisito = d.codrequisito inner join solicitud s "
					+ "on d.nrosolicitud = s.nrosolicitud where s.codpostulante=? "
					+ "and d.estado='pendiente'";
			ps = con.prepareStatement(sql);
			DetalleSolicitudBeanMixto bean;
			ps.setInt(1, cod_postu);

			System.out.println("Busca Detalle Pendiente :" + ps);

			rs = ps.executeQuery();
			while (rs.next()) {
				bean = new DetalleSolicitudBeanMixto();
				bean.setIntItem(rs.getInt(1));
				bean.setStrNombre(rs.getString(2));
				bean.setIntNroSolicitud(rs.getInt(3));
				lista.add(bean);
			}
			return lista;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			try {
				if (con != null)
					con.close();
				if (ps != null)
					ps.close();
			} catch (Exception e2) {
				System.out.println(e2.getMessage());
			}

		}

		return null;
	}

	@Override
	public DetalleSolicitudBean buscaDetalle(Integer intItem)
			throws SQLException {
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {

			con = new MySqlDBConn().getConnection();
			String sql = "select d.item,d.imagen "
					+ "from  detallesolicitud d  inner join requisito r "
					+ "on r.codrequisito = d.codrequisito where d.item=?";

			ps = con.prepareStatement(sql);
			DetalleSolicitudBean bean = new DetalleSolicitudBean();
			ps.setInt(1, intItem);

			System.out.println("Busca Detalle  :" + ps);

			rs = ps.executeQuery();
			while (rs.next()) {

				bean.setIntItem(rs.getInt(1));
				bean.setBlbImagen(rs.getBytes(2));

			}
			return bean;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			try {
				if (con != null)
					con.close();
				if (ps != null)
					ps.close();
			} catch (Exception e2) {
				System.out.println(e2.getMessage());
			}

		}

		return null;
	}

	@Override
	public Integer aprobarRequisito(Integer intItem,String observacion) throws SQLException {
		Connection con = null;
		PreparedStatement ps = null;

		try {
			con = new MySqlDBConn().getConnection();
			String sql = "update detallesolicitud set estado='aprobado',observacion='"+observacion+"' where item=?";
			ps = con.prepareStatement(sql);
			ps.setInt(1, intItem);

			System.out.println("SE actualizo el requisito :" + ps);

			return ps.executeUpdate();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			try {
				if (con != null)
					con.close();
				if (ps != null)
					ps.close();
			} catch (Exception e2) {
				System.out.println(e2.getMessage());
			}

		}

		return -1;
	}

	@Override
	public Integer desaprobarRequisito(Integer intItem,String observacion) throws SQLException {
		Connection con = null;
		PreparedStatement ps = null;

		try {
			con = new MySqlDBConn().getConnection();
			String sql = "update detallesolicitud set estado='desaprobado',observacion='"+observacion+"' where item=?";
			ps = con.prepareStatement(sql);
			ps.setInt(1, intItem);

			System.out.println("SE actualizo el requisito :" + ps);

			return ps.executeUpdate();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			try {
				if (con != null)
					con.close();
				if (ps != null)
					ps.close();
			} catch (Exception e2) {
				System.out.println(e2.getMessage());
			}

		}

		return -1;
	}

	@Override
	public ArrayList<DetalleSolicitudBean> traeDetalleSolicitud()
			throws SQLException {
		Connection con = null;
		PreparedStatement ps = null;
		ArrayList<DetalleSolicitudBean> lista;
		ResultSet rs = null;
		try {
			lista = new ArrayList<DetalleSolicitudBean>();
			con = new MySqlDBConn().getConnection();
			String sql = "select * from  detallesolicitud d";
			ps = con.prepareStatement(sql);
			DetalleSolicitudBean bean;

			rs = ps.executeQuery();
			while (rs.next()) {
				bean = new DetalleSolicitudBean();
				bean.setIntItem(rs.getInt(1));
				bean.setBlbImagen(rs.getBytes(2));
				bean.setStrObservacion(rs.getString(3));
				bean.setStrEstado(rs.getString(4));
				bean.setIntCodRequisito(rs.getInt(5));
				bean.setIntNroSolicitud(rs.getInt(6));
				lista.add(bean);
			}
			return lista;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			try {
				if (con != null)
					con.close();
				if (ps != null)
					ps.close();
			} catch (Exception e2) {
				System.out.println(e2.getMessage());
			}

		}

		return null;

	}

	@Override
	public EvaluarBean obtenerPendientesxSol(Integer nroSolicitud)
			throws SQLException {
		Connection con = null;
		CallableStatement cst = null;

		ResultSet rs = null;
		try {

			con = new MySqlDBConn().getConnection();
			String sql = "CALL datos_solicitud(?)";
			cst = con.prepareCall(sql);
			EvaluarBean bean = null;
			cst.setInt(1, nroSolicitud);

			System.out.println("Busca solicitudes con detal pend :" + cst);

			rs = cst.executeQuery();
			while (rs.next()) {
				bean = new EvaluarBean();
				bean.setNroSolicitud(nroSolicitud);
				bean.setIntCantidadPendientes(rs.getInt(1));
			}
			return bean;
		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			try {
				if (con != null)
					con.close();
				if (cst != null)
					cst.close();
			} catch (Exception e2) {
				System.out.println(e2.getMessage());
			}

		}

		return null;
	}
	
	@Override
	public int actualizaDetalleSolicitud(DetalleSolicitudBean bean)
			throws Exception {

		Connection conn = null;
		PreparedStatement pstm = null;
		
		try {
			String sql = "update detallesolicitud set IMAGEN=?,OBSERVACION=?,ESTADO=? " +
					"where NROSOLICITUD=? and CODREQUISITO=? ";
			conn = new MySqlDBConn().getConnection();
			pstm = conn.prepareStatement(sql);
				
			pstm.setBytes(1, bean.getBlbImagen());
			pstm.setString(2, bean.getStrObservacion());
			pstm.setString(3, bean.getStrEstado());
			pstm.setInt(4, bean.getIntNroSolicitud());
			pstm.setInt(5, bean.getIntCodRequisito());

			return pstm.executeUpdate();

		} catch (Exception e) {
			System.out.println(e);
		} finally {
			try {
				if (pstm != null)
					pstm.close();
			} catch (SQLException e1) {
			}
			try {
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
			}
		}
		return -1;
	}
	
	

}
